package tee;


import java.util.Date;

/**
 * 一般请求结果
 *
 * @param <Data> 数据
 * @author baimao
 */
public final class ApiResult<Data> {

    // 成功状态码
    public static final String RESULT_OK_CODE = "0";
    // 失败状态码
    public static final String RESULT_FAIL_CODE = "1";
    // 成功消息
    public static final String RESULT_OK_MSG = "OK";
    // 成功消息
    public static final String RESULT_FAIL_MSG = "fail";

    // 状态码
    private final String code;
    // 错误消息
    private final String message;
    // 数据正文
    private final Data data;
    // 时间戳
    private final Date time = new Date();

    public ApiResult(String code, String message, Data data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 创建一个新的 api 结果对象实例
     *
     * @param data   数据正文
     * @param <Data> 数据正文类型
     * @return 返回 {@link ApiResult} 实例
     */
    public static <Data> ApiResult<Data> newInstance(Data data) {

        return new ApiResult<>(RESULT_OK_CODE, RESULT_OK_MSG, data);
    }


    public static ApiResult fail(String message) {
        return new ApiResult(RESULT_FAIL_CODE, message, null);
    }

    public static ApiResult fail() {
        return new ApiResult(RESULT_FAIL_CODE, RESULT_FAIL_MSG, null);
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public Data getData() {
        return data;
    }

    public Date getTime() {
        return time;
    }
}
